package tp.disenio.client;


import java.util.ArrayList;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;


public class VerCompetenciaUNA extends Composite{
	
	private Button btnHome;
	private Button btnLogin;
	private Button btnResultadosBsqueda;
	private PushButton pshbtnFixture;
	private PushButton pshbtnTablaDePosiciones;
	private TextBox txtBxNombre;
	private TextBox txtBxModalidad;
	private TextBox txtBxDeporte;
	private TextBox txtBxEstadodecompetencia;
	private TextBox txtBxUsuario;
	private TextBox txtBxUserLogin;
	private PasswordTextBox txtBxPassLogin;
	private CompetenciaDTO competenciaDTO;

	public VerCompetenciaUNA(CompetenciaDTO competencia) {
		
		final LoginServiceAsync loginService = GWT.create(LoginService.class);
		final RootPanel rootPanel = RootPanel.get("nameFieldContainer");
		
		AbsolutePanel absolutePanel = new AbsolutePanel();
		initWidget(absolutePanel);
		absolutePanel.setSize("1024px", "576px");
		
		setCompetenciaDTO(competencia);
		
		
		//WIDGETS
		
		btnLogin = new Button("Login");
		absolutePanel.add(btnLogin, 910, 80);
		btnLogin.setSize("50", "10");
			
		btnHome = new Button("Home");
		absolutePanel.add(btnHome, 100, 100);
		
		btnResultadosBsqueda = new Button("Volver a B\u00FAsqueda");
		absolutePanel.add(btnResultadosBsqueda, 160, 100);
		
		txtBxUserLogin = new TextBox();
		absolutePanel.add(txtBxUserLogin, 770, 70);
		txtBxUserLogin.setSize("120px", "10px");
		
		txtBxPassLogin = new PasswordTextBox();
		absolutePanel.add(txtBxPassLogin, 770, 95);
		txtBxPassLogin.setSize("120px", "10px");
		
		txtBxNombre = new TextBox();
		absolutePanel.add(txtBxNombre, 196, 185);
		txtBxNombre.setSize("150", "20");
		
		txtBxModalidad = new TextBox();
		absolutePanel.add(txtBxModalidad, 196, 225);
		txtBxModalidad.setSize("150", "20");
		
		txtBxDeporte = new TextBox();
		absolutePanel.add(txtBxDeporte, 196, 265);
		txtBxDeporte.setSize("150", "20");
		
		txtBxEstadodecompetencia = new TextBox();
		absolutePanel.add(txtBxEstadodecompetencia, 196, 305);
		txtBxEstadodecompetencia.setSize("150", "20");
		
		txtBxUsuario = new TextBox();
		absolutePanel.add(txtBxUsuario, 196, 345);
		txtBxUsuario.setSize("150", "20");
		
		Image image = new Image("images/ImagenVerCompetencia.png");
		absolutePanel.add(image, 515, 194);
		image.setSize("173px", "166px");
		
		pshbtnFixture = new PushButton("Fixture");
		absolutePanel.add(pshbtnFixture, 763, 216);
		pshbtnFixture.setSize("131px", "18px");
		
		pshbtnTablaDePosiciones = new PushButton("Tabla de Posiciones");
		absolutePanel.add(pshbtnTablaDePosiciones, 763, 278);
		pshbtnTablaDePosiciones.setSize("131px", "18px");
		
		
		
		// LABELS
		
		Label labelUserLogin = new Label("Usuario");
		labelUserLogin.setStyleName("usuarioLabel");
		absolutePanel.add(labelUserLogin,700,70);
					
		Label labelPasswordLogin = new Label("Pass");
		labelPasswordLogin.setStyleName("usuarioLabel");
		absolutePanel.add(labelPasswordLogin,700,95);
		
		Label lblInformacionDeLa = new Label("INFORMACION DE LA COMPETENCIA");
		lblInformacionDeLa.setStyleName("subTituloInformacionCompetencia");
		absolutePanel.add(lblInformacionDeLa, 275, 140);
		
		Label lblNombre = new Label("Nombre ");
		lblNombre.setStyleName("label");
		absolutePanel.add(lblNombre, 121, 195);
		
		Label lblModalidad = new Label("Modalidad");
		lblModalidad.setStyleName("label");
		absolutePanel.add(lblModalidad, 121, 235);
		lblModalidad.setSize("45px", "18px");
		
		Label lblDeporte = new Label("Deporte");
		lblDeporte.setStyleName("label");
		absolutePanel.add(lblDeporte, 121, 275);
		lblDeporte.setSize("45px", "18px");
		
		Label lblEstadodecompetencia = new Label("Estado");
		lblEstadodecompetencia.setStyleName("label");
		absolutePanel.add(lblEstadodecompetencia, 121, 315);
		
		Label label = new Label("Usuario");
		label.setStyleName("label");
		absolutePanel.add(label, 121, 355);
		label.setSize("44px", "18px");
		
		Label lblProximosEncuentros = new Label("Proximos Encuentros");
		lblProximosEncuentros.setStyleName("subTitulo");
		absolutePanel.add(lblProximosEncuentros, 196, 400);
			
		
		// Cargar datos de competencia
		
			cargarDatosCompetencia();
			
			
		
		// HANDLERS
		
		getBtnHome().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new Ingreso(),(Window.getClientWidth()/3),150);
			   
			}
		});
		
		getBtnResultadosBsqueda().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {

//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new ListarCompetenciasDeportivasUNA(),125,65);
			}
		});
		
		getPshbtnFixture().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new FixtureUNA(getCompetenciaDTO()),100,50);
				
			}
		});
		
		getPshbtnTablaDePosiciones().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new TablaDePosicionesUNA(getCompetenciaDTO()),100,50);
			}
		});
		
		getBtnLogin().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				
				final LoginServiceAsync loginService = GWT.create(LoginService.class);
				final DialogBox dialogBox = new DialogBox();
				final Button dialogBoxButton = new Button("Ok");
				final Label textToServerLabel = new Label();
				final HTML serverResponseLabel = new HTML();
				
				// Handler boton de dialogBox
				dialogBoxButton.addClickHandler(new ClickHandler() {
					public void onClick(ClickEvent event) {
						dialogBox.hide();
					}
				});
				 
				 AsyncCallback<String> callback = new AsyncCallback<String>() {
					 
					     public void onFailure(Throwable caught) {
					    	 dialogBox.setText("Auslober");
								dialogBox.setAnimationEnabled(true);
								VerticalPanel dialogVPanel = new VerticalPanel();
								dialogVPanel.addStyleName("dialogVPanel");
								dialogVPanel.add(new HTML("<b>Respuesta del servidor:</b>"));
								dialogVPanel.add(textToServerLabel);
								dialogVPanel.add(new HTML("<br>"+(String)caught.getMessage()));
								dialogVPanel.add(serverResponseLabel);
								dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
								dialogVPanel.add(dialogBoxButton);
								dialogBox.setWidget(dialogVPanel);
								dialogVPanel.setSize("250px", "100px");
								dialogBox.setPopupPosition(535,225);
								dialogBox.show();
								dialogBoxButton.setFocus(true);

					    }

						@Override
						public void onSuccess(String result) {
							
//							setVisibilidad(false);
							rootPanel.remove(rootPanel.getWidget(1));
							rootPanel.add(new HomeUA(getTxtBxUserLogin().getText()),100,50);
							dialogBox.setText("Auslober");
							dialogBox.setAnimationEnabled(true);
							VerticalPanel dialogVPanel = new VerticalPanel();
							dialogVPanel.addStyleName("dialogVPanel");
							dialogVPanel.add(new HTML("<b>Respuesta del servidor:</b>"));
							dialogVPanel.add(textToServerLabel);
							dialogVPanel.add(new HTML("<br>"+(String)result));
							dialogVPanel.add(serverResponseLabel);
							dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
							dialogVPanel.add(dialogBoxButton);
							dialogBox.setWidget(dialogVPanel);
							dialogVPanel.setSize("250px", "100px");
							dialogBox.setPopupPosition(535,225);
							dialogBox.show();
							dialogBoxButton.setFocus(true);


							 
							
						}
					  };
					  
				loginService.loginServer(getTxtBxUserLogin().getText(),getTxtBxPassLogin().getText(),callback);
		
				
			}
		});
			
	
	getTxtBxUserLogin().addKeyPressHandler(new KeyPressHandler() {
			
			@Override
			public void onKeyPress(KeyPressEvent event) {
			
				if(event.getUnicodeCharCode()==13){
					getBtnLogin().click();
					
				}
			
			}
		});
		
		getTxtBxPassLogin().addKeyPressHandler(new KeyPressHandler() {
			
			@Override
			public void onKeyPress(KeyPressEvent event) {
			
				if(event.getUnicodeCharCode()==13){
					getBtnLogin().click();
					
				}
			
			}
		});
		
	// TAB INDEX
		
		getBtnHome().setTabIndex(1);
		getBtnResultadosBsqueda().setTabIndex(2);
		getTxtBxNombre().setTabIndex(3);
		getTxtBxModalidad().setTabIndex(4);
		getTxtBxDeporte().setTabIndex(5);
		getTxtBxEstadodecompetencia().setTabIndex(6);
		getTxtBxUsuario().setTabIndex(7);
		getPshbtnFixture().setTabIndex(8);
		getPshbtnTablaDePosiciones().setTabIndex(9);
		getTxtBxUserLogin().setTabIndex(10);
		getTxtBxPassLogin().setTabIndex(11);
		getBtnLogin().setTabIndex(12);
		
		
	}
	
	
	public TextBox getTxtBxNombre() {
		return txtBxNombre;
	}


	public void setTxtBxNombre(TextBox txtBxNombre) {
		this.txtBxNombre = txtBxNombre;
	}


	public TextBox getTxtBxModalidad() {
		return txtBxModalidad;
	}


	public void setTxtBxModalidad(TextBox txtBxModalidad) {
		this.txtBxModalidad = txtBxModalidad;
	}


	public TextBox getTxtBxDeporte() {
		return txtBxDeporte;
	}


	public void setTxtBxDeporte(TextBox txtBxDeporte) {
		this.txtBxDeporte = txtBxDeporte;
	}


	public TextBox getTxtBxEstadodecompetencia() {
		return txtBxEstadodecompetencia;
	}


	public void setTxtBxEstadodecompetencia(TextBox txtBxEstadodecompetencia) {
		this.txtBxEstadodecompetencia = txtBxEstadodecompetencia;
	}


	public TextBox getTxtBxUsuario() {
		return txtBxUsuario;
	}


	public void setTxtBxUsuario(TextBox txtBxUsuario) {
		this.txtBxUsuario = txtBxUsuario;
	}


	public Button getBtnHome() {
		return btnHome;
	}


	public Button getBtnLogin() {
		return btnLogin;
	}


	public Button getBtnResultadosBsqueda() {
		return btnResultadosBsqueda;
	}


	public PushButton getPshbtnFixture() {
		return pshbtnFixture;
	}


	public PushButton getPshbtnTablaDePosiciones() {
		return pshbtnTablaDePosiciones;
	}


	public TextBox getTxtBxUserLogin() {
		return txtBxUserLogin;
	}


	public PasswordTextBox getTxtBxPassLogin() {
		return txtBxPassLogin;
	}


	public void setVisibilidad(boolean estado){
		this.setVisible(estado);
	}
	

	public void cargarDatosCompetencia(){
		
		getTxtBxNombre().setText(getCompetenciaDTO().getNombre());getTxtBxNombre().setReadOnly(true);
		getTxtBxModalidad().setText(getCompetenciaDTO().getModalidad());getTxtBxModalidad().setReadOnly(true);
		getTxtBxDeporte().setText(getCompetenciaDTO().getDeporte());getTxtBxDeporte().setReadOnly(true);
		getTxtBxEstadodecompetencia().setText(getCompetenciaDTO().getEstadodecompetencia());getTxtBxEstadodecompetencia().setReadOnly(true);
		getTxtBxUsuario().setText(getCompetenciaDTO().getUsuario());getTxtBxUsuario().setReadOnly(true);
	}
	

	/**
	 * @return the competenciaDTO
	 */
	public CompetenciaDTO getCompetenciaDTO() {
		return competenciaDTO;
	}


	/**
	 * @param competenciaDTO the competenciaDTO to set
	 */
	public void setCompetenciaDTO(CompetenciaDTO competenciaDTO) {
		this.competenciaDTO = competenciaDTO;
	}

}
